<?php

namespace Protocols;
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/9/6
 * Time: 14:07
 */
/**
 * Class JsonNL
 * @package Protocols
 * @User: yfl
 * @Time:二〇一七年九月六日 14:40:43
 * @description:自定义简单的协议
 */
class JsonNL
{
    /**
     * @param $buffer
     * @return bool|int
     * 如果可以得到包的长度 则返回包在buffer中的长度，否则返回0继续等待数据
     * 如果协议有问题 直接返回false 当前的客户端因此会断开
     * @User: yfl
     * @Time: 2017-09-06 14:26:25
     * @description: * 检查包的完整性
     */
    public static function input($buffer)
    {
        //检测并获得换行符 "\n" 的位置
        $pos = strpos($buffer, "\n");
        //没有换行符 无法得知包长 返回0继续等待数据
        if ($pos === false) {
            return 0;
        }
        //有换行符 返回当前包长（包括换行符）

        return $pos + 1;
    }

    /**
     * @param $buffer
     * @return string
     * @User: yfl
     * @Time:
     * @description:打包 向客户端发送数据的时候会自动调用
     */
    public static function encode($buffer)
    {
        //json序列化数据 并加上 "\n" 换行符作为请求的结束的标记
          return json_encode($buffer)."\n";
    }

    /**
     * @param $buffer
     * @return mixed
     * @User: yfl
     * @Time:
     * @description: 解包 当收到的数据的字节数等会input返回的字节数（大于 0的值） 自动调用
     *  并传递给onMessage毁掉函数的$data 参数
     */

    public static function decode($buffer)
    {
        //去掉换行， 并解包成数组
        return json_decode(trim($buffer),true);

    }
}